package cn.iocoder.boot.kmeans;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Main {

    public static void main(String[] args) {
        // 生成模拟人才数据
        List<Talent> talents = DataGenerator.generateSampleTalents(20);

        // 使用 K-means 聚类算法进行聚类
        int k = 3; // 假设分为 3 类人才
        int maxIterations = 100;
        List<Cluster> clusters = KMeans.cluster(talents, k, maxIterations);

        // 输出聚类结果
        System.out.println("聚类结果：");
        for (int i = 0; i < clusters.size(); i++) {
            Cluster cluster = clusters.get(i);
            System.out.println("簇 " + (i + 1) + "（中心点： " + cluster.getCentroid().getName() + "）：");
            for (Talent talent : cluster.getTalents()) {
                System.out.println("  " + talent.getName() + " - 能力: " + talent.toString());
            }
        }

        // 模拟岗位人才推荐
        // 假设有一个岗位需求，其特征向量为 [8, 6, 7]（技能、经验、教育背景）
        Talent position = new Talent("Software Engineer Position", new int[]{8, 6, 7}, 0); // 岗位对象的薪资设为0，不参与计算

        // 设置企业可支出薪水上限
        int maxSalary = 20000;

        // 输出企业的要求
        CompanyRequirements.setCompanyRequirements(position, maxSalary);

        RecommendationEngine.recommendTalentsWithReason(clusters, position, maxSalary);
    }
}